package com.igeek.collateral.service.Impl;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.igeek.collateral.entity.Collateral;
import com.igeek.collateral.entity.Cstatus;
import com.igeek.collateral.mapper.CollateralMapper;
import com.igeek.collateral.mapper.CstatusMapper;
import com.igeek.collateral.service.ICstatusService;
import com.igeek.collateral.vo.StatusVo;
import liquibase.pro.packaged.Q;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author author
 * @since 2024-07-24
 */
@Service
public class CstatusServiceImpl extends ServiceImpl<CstatusMapper, Cstatus> implements ICstatusService {

    @Autowired
    private CollateralMapper collateralMapper;
    @Autowired
    private CstatusMapper cstatusMapper;
    @Override
    public boolean addNew(int collateralId) {
        Collateral collateral = collateralMapper.selectById(collateralId);
        Cstatus cstatus=new Cstatus();
        LocalDate localDate=LocalDate.now();
        //(LocalDate与Date之间的转换)
        ZoneId zoneId = ZoneId.systemDefault();
        ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
        Date time = Date.from(zdt.toInstant());
        cstatus.setTime(time);
        cstatus.setStatus(collateral.getStatus());
        cstatus.setCollateralId(collateralId);
        this.baseMapper.insert(cstatus);
        return cstatus!=null?true:false;
    }



    //时间轴
    @Override
    public List<StatusVo> findAllMess(Long collateralId) {
        //根据押品id拿到对应的List
        LambdaQueryWrapper<Cstatus> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Cstatus::getCollateralId,collateralId);
        List<Cstatus> cstatuses1 = this.baseMapper.selectList(lambdaQueryWrapper);
        //
        List<StatusVo>voList=new ArrayList<>();
        //将集合中的时间和状态全部赋值过来
        if(!ObjectUtils.isEmpty(cstatuses1))
        {
            cstatuses1.forEach(cs->{
                if(!ObjectUtils.isEmpty(cs))
                {
                    //赋值操作  0：新建待审核 1：待评估  2：审核未通过 3：已完成评估  4：评估未通过 5：正常进库 6: 置换进库  7：进库未通过 8：正常出库 9：置换出库 10：临时出库 11：出库未通过  12：完成
                   StatusVo statusVo=new StatusVo();
                    if(cs.getStatus()==0){
                        statusVo.setContent("新建待审核");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("success");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==1)
                    {
                        statusVo.setContent("待评估");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("success");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==2)
                    {
                        statusVo.setContent("审核未通过");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("danger");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==3)
                    {
                        statusVo.setContent("评估已完成");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("success");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==4)
                    {
                        statusVo.setContent("评估未通过");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("danger");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==5)
                    {
                        statusVo.setContent("正常进库");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("success");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==6)
                    {
                        statusVo.setContent("置换进库");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("success");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==7)
                    {
                        statusVo.setContent("申请未通过");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("danger");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==8)
                    {
                        statusVo.setContent("正常出库");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("success");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==9)
                    {
                        statusVo.setContent("置换出库");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("success");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==10)
                    {
                        statusVo.setContent("临时出库");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("success");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==11)
                    {
                        statusVo.setContent("出库未通过");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("danger");
                        voList.add(statusVo);
                    }
                    else if(cs.getStatus()==12){
                        statusVo.setContent("完成");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("primary");
                        voList.add(statusVo);
                    }
                    else {
                        statusVo.setContent("已置换");
                        statusVo.setTime(cs.getTime());
                        statusVo.setType("primary");
                        voList.add(statusVo);
                    }

                }
            });
        }
        return voList;
    }
}
